package edu.wust;

import java.util.Arrays;
import java.util.HashSet;

import static java.lang.String.valueOf;

//如果一个 n 位数使用了 1 到 n 中每个数字且只使用了一次，我们称其为全数字。例如，
//        15234 这个五位数，是 1 到 5 全数字的。
//        7254 是一个不寻常的数，因为：39 × 186 = 7254 这个算式的乘数，被乘数和乘积组成了
//        一个 1 到 9 的全数字组合。
//        找出所有能够组合成 1 到 9 全数字的乘法算式中乘积的和。
//        提示: 有的乘积数字能够被多个乘法算式得到，所以在计算时要记得只计算它们一次。
//        答案：45228
public class exam32 {
    public static boolean all(int a,int b,int[] arr){
        int c=a*b;
        String s=valueOf(a)+valueOf(b)+valueOf(c);
        for(int i=0;i<s.length();i++){
            int index=s.charAt(i)-'0';
            arr[index]++;
        }
        if(arr[0]!=0)
            return false;
        for(int i=1;i<=9;i++) {
            if(arr[i]!=1)
                return false;
        }
        return true;
    }
    public static void main(String[] args) {
        int[] num=new int[10];
        int sum=0;
        HashSet<Integer> data=new HashSet<Integer>();
        for(int i=1;i<100;++i){       //1位    2位
            for(int j=100;j<=9999;++j){      //代表三位    四位
                Arrays.setAll(num, x->0);       //数组清0
                if(all(i,j,num)){
                    data.add(i*j);
                }
            }
        }
        for(int n : data){
            sum+=n;
        }
        System.out.println(sum);
    }
}

